{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Categorical and mixed type data drift detection on income prediction\n",
    "\n",
    "### Method\n",
    "\n",
    "The drift detector applies feature-wise two-sample [Kolmogorov-Smirnov](https://en.wikipedia.org/wiki/Kolmogorov%E2%80%93Smirnov_test) (K-S) tests for the continuous numerical features and [Chi-Squared](https://en.wikipedia.org/wiki/Chi-squared_test) tests for the categorical features. For multivariate data, the obtained p-values for each feature are aggregated either via the [Bonferroni](https://mathworld.wolfram.com/BonferroniCorrection.html) or the [False Discovery Rate](http://www.math.tau.ac.il/~ybenja/MyPapers/benjamini_hochberg1995.pdf) (FDR) correction. The Bonferroni correction is more conservative and controls for the probability of at least one false positive. The FDR correction on the other hand allows for an expected fraction of false positives to occur.\n",
    "\n",
    "\n",
    "\n",
    "### Dataset\n",
    "\n",
    "The instances contain a person's characteristics like age, marital status or education while the label represents whether the person makes more or less than $50k per year. The dataset consists of a mixture of numerical and categorical features. It is fetched using the [Alibi](https://github.com/SeldonIO/alibi) library, which can be installed with pip:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "!pip install alibi"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import alibi\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "\n",
    "from alibi_detect.cd import ChiSquareDrift, TabularDrift\n",
    "from alibi_detect.saving import save_detector, load_detector"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Load income prediction dataset\n",
    "\n",
    "The ```fetch_adult``` function returns a ```Bunch``` object containing the instances, the targets, the feature names and a dictionary with as keys the column indices of the categorical features and as values the possible categories for each categorical variable."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "((32561, 12), (32561,))"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "adult = alibi.datasets.fetch_adult()\n",
    "X, y = adult.data, adult.target\n",
    "feature_names = adult.feature_names\n",
    "category_map = adult.category_map\n",
    "X.shape, y.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We split the data in a reference set and 2 test sets on which we test the data drift:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "((10000, 12), (10000, 12), (10000, 12))"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "n_ref = 10000\n",
    "n_test = 10000\n",
    "\n",
    "X_ref, X_t0, X_t1 = X[:n_ref], X[n_ref:n_ref + n_test], X[n_ref + n_test:n_ref + 2 * n_test]\n",
    "X_ref.shape, X_t0.shape, X_t1.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Detect drift\n",
    "\n",
    "We need to provide the drift detector with the columns which contain categorical features so it knows which features require the Chi-Squared and which ones require the K-S univariate test. We can either provide a dict with as keys the column indices and as values the number of possible categories or just set the values to *None* and let the detector infer the number of categories from the reference data as in the example below:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "categories_per_feature = {f: None for f in list(category_map.keys())}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Initialize the detector:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "cd = TabularDrift(X_ref, p_val=.05, categories_per_feature=categories_per_feature)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can also save/load an initialised detector:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "WARNING:alibi_detect.utils.saving:Directory my_path/model does not exist.\n"
     ]
    }
   ],
   "source": [
    "filepath = 'my_path'  # change to directory where detector is saved\n",
    "save_detector(cd, filepath)\n",
    "cd = load_detector(filepath)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now we can check whether the 2 test sets are drifting from the reference data:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Drift? No!\n"
     ]
    }
   ],
   "source": [
    "preds = cd.predict(X_t0)\n",
    "labels = ['No!', 'Yes!']\n",
    "print('Drift? {}'.format(labels[preds['data']['is_drift']]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's take a closer look at each of the features. The `preds` dictionary also returns the K-S or Chi-Squared test statistics and p-value for each feature:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Age -- K-S 0.012 -- p-value 0.512\n",
      "Workclass -- Chi2 8.487 -- p-value 0.387\n",
      "Education -- Chi2 4.753 -- p-value 0.576\n",
      "Marital Status -- Chi2 3.160 -- p-value 0.368\n",
      "Occupation -- Chi2 8.194 -- p-value 0.415\n",
      "Relationship -- Chi2 0.485 -- p-value 0.993\n",
      "Race -- Chi2 0.587 -- p-value 0.965\n",
      "Sex -- Chi2 0.217 -- p-value 0.641\n",
      "Capital Gain -- K-S 0.002 -- p-value 1.000\n",
      "Capital Loss -- K-S 0.002 -- p-value 1.000\n",
      "Hours per week -- K-S 0.012 -- p-value 0.512\n",
      "Country -- Chi2 9.991 -- p-value 0.441\n"
     ]
    }
   ],
   "source": [
    "for f in range(cd.n_features):\n",
    "    stat = 'Chi2' if f in list(categories_per_feature.keys()) else 'K-S'\n",
    "    fname = feature_names[f]\n",
    "    stat_val, p_val = preds['data']['distance'][f], preds['data']['p_val'][f]\n",
    "    print(f'{fname} -- {stat} {stat_val:.3f} -- p-value {p_val:.3f}')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "None of the feature-level p-values are below the threshold: "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.004166666666666667"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "preds['data']['threshold']"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "If you are interested in individual feature-wise drift, this is also possible:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "fpreds = cd.predict(X_t0, drift_type='feature')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Age -- Drift? No! -- K-S 0.012 -- p-value 0.512\n",
      "Workclass -- Drift? No! -- Chi2 8.487 -- p-value 0.387\n",
      "Education -- Drift? No! -- Chi2 4.753 -- p-value 0.576\n",
      "Marital Status -- Drift? No! -- Chi2 3.160 -- p-value 0.368\n",
      "Occupation -- Drift? No! -- Chi2 8.194 -- p-value 0.415\n",
      "Relationship -- Drift? No! -- Chi2 0.485 -- p-value 0.993\n",
      "Race -- Drift? No! -- Chi2 0.587 -- p-value 0.965\n",
      "Sex -- Drift? No! -- Chi2 0.217 -- p-value 0.641\n",
      "Capital Gain -- Drift? No! -- K-S 0.002 -- p-value 1.000\n",
      "Capital Loss -- Drift? No! -- K-S 0.002 -- p-value 1.000\n",
      "Hours per week -- Drift? No! -- K-S 0.012 -- p-value 0.512\n",
      "Country -- Drift? No! -- Chi2 9.991 -- p-value 0.441\n"
     ]
    }
   ],
   "source": [
    "for f in range(cd.n_features):\n",
    "    stat = 'Chi2' if f in list(categories_per_feature.keys()) else 'K-S'\n",
    "    fname = feature_names[f]\n",
    "    is_drift = fpreds['data']['is_drift'][f]\n",
    "    stat_val, p_val = fpreds['data']['distance'][f], fpreds['data']['p_val'][f]\n",
    "    print(f'{fname} -- Drift? {labels[is_drift]} -- {stat} {stat_val:.3f} -- p-value {p_val:.3f}')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "What about the second test set?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Drift? No!\n"
     ]
    }
   ],
   "source": [
    "preds = cd.predict(X_t1)\n",
    "labels = ['No!', 'Yes!']\n",
    "print('Drift? {}'.format(labels[preds['data']['is_drift']]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can again investigate the individual features:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Age -- Drift? No! -- K-S 0.007 -- p-value 0.967\n",
      "Workclass -- Drift? No! -- Chi2 5.800 -- p-value 0.670\n",
      "Education -- Drift? No! -- Chi2 5.413 -- p-value 0.492\n",
      "Marital Status -- Drift? No! -- Chi2 1.167 -- p-value 0.761\n",
      "Occupation -- Drift? No! -- Chi2 12.296 -- p-value 0.138\n",
      "Relationship -- Drift? No! -- Chi2 6.520 -- p-value 0.259\n",
      "Race -- Drift? No! -- Chi2 1.417 -- p-value 0.841\n",
      "Sex -- Drift? No! -- Chi2 0.008 -- p-value 0.928\n",
      "Capital Gain -- Drift? No! -- K-S 0.005 -- p-value 0.999\n",
      "Capital Loss -- Drift? No! -- K-S 0.003 -- p-value 1.000\n",
      "Hours per week -- Drift? No! -- K-S 0.004 -- p-value 1.000\n",
      "Country -- Drift? No! -- Chi2 11.256 -- p-value 0.338\n"
     ]
    }
   ],
   "source": [
    "for f in range(cd.n_features):\n",
    "    stat = 'Chi2' if f in list(categories_per_feature.keys()) else 'K-S'\n",
    "    fname = feature_names[f]\n",
    "    is_drift = (preds['data']['p_val'][f] < preds['data']['threshold']).astype(int)\n",
    "    stat_val, p_val = preds['data']['distance'][f], preds['data']['p_val'][f]\n",
    "    print(f'{fname} -- Drift? {labels[is_drift]} -- {stat} {stat_val:.3f} -- p-value {p_val:.3f}')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "It seems like there is little divergence in the distributions of the features between the reference and test set. Let's visualize this:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "def plot_categories(idx: int) -> None:\n",
    "    # reference data\n",
    "    x_ref_count = {f: [(X_ref[:, f] == v).sum() for v in vals] \n",
    "                   for f, vals in cd.x_ref_categories.items()}\n",
    "    fref_drift = {cat: x_ref_count[idx][i] for i, cat in enumerate(category_map[idx])}\n",
    "    \n",
    "    # test set\n",
    "    cats = {f: list(np.unique(X_t1[:, f])) for f in categories_per_feature.keys()}\n",
    "    X_count = {f: [(X_t1[:, f] == v).sum() for v in vals] for f, vals in cats.items()}\n",
    "    fxt1_drift = {cat: X_count[idx][i] for i, cat in enumerate(category_map[idx])}\n",
    "    \n",
    "    # plot bar chart\n",
    "    plot_labels = list(fxt1_drift.keys())\n",
    "    ind = np.arange(len(plot_labels))\n",
    "    width = .35\n",
    "    fig, ax = plt.subplots()\n",
    "    p1 = ax.bar(ind, list(fref_drift.values()), width)\n",
    "    p2 = ax.bar(ind + width, list(fxt1_drift.values()), width)\n",
    "    ax.set_title(f'Counts per category for {feature_names[idx]} feature')\n",
    "    ax.set_xticks(ind + width / 2)\n",
    "    ax.set_xticklabels(plot_labels)\n",
    "    ax.legend((p1[0], p2[0]), ('Reference', 'Test'), loc='upper right', ncol=2)\n",
    "    ax.set_ylabel('Counts')\n",
    "    ax.set_xlabel('Categories')\n",
    "    plt.xticks(list(np.arange(len(plot_labels))), plot_labels, rotation='vertical')\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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f/Lt75/PsSd9g80H9qu5zyWXXMJdd93FwIEDa25Tbf78+fTs2WIfPWev1snHm1N39ZprrsmkSZOyTc8+m1VXXZVvfOMbHX6ZUaNGseWWW/LBDy7TzMuAryzMrIbNt9yKl2a+sHD5Rz/6EVtttRWbb745Z52Vzc56wgkn8PTTT7PHHntwwQUX8MYbb3D00Uez9dZbM2zYMG688UYArrzySvbZZx923nlndtlll5rHmzZtGhtvvDHHHnssm2yyCSNGjOCtt7KR46dOncquu+7KFltswZZbbsm//vWvmsdZno0ePZqtt96aoUOH8uUvf5kFCxYwf/58Dj/8cDbbbDM23XRTLrroIq699lomTZrEQQcd1OErkvY4WZjZEt5//33G/e1+dtxtDwDuuOMOpkyZwrhx45g0aRITJkzg/vvv57LLLmO99dbjnnvu4atf/Srf+9732HnnnRk3bhz33HMPp556Km+88QYAEydO5He/+x333XdfzeMBTJkyhRNPPJHJkyfTr18/rr/+egAOPfRQTjzxRB599FEeeOAB1l133brHWR498cQT3HDDDTzwwANMmjSJ+fPnM3bsWCZMmMDLL7/M448/zhNPPMERRxyxMElUksaKK664TK/dYteCZtZM77z9FgeO/DQvzXyBIRt8lG132AnIksUdd9zBsGHDAJg3bx5Tpkxhhx12WGz/O+64g5tuuonzzz8fyHp4PffccwDsttturLHGGnWPt/766zNkyBCGDh0KwCc+8QmmTZvG3LlzmTFjBvvvvz+Q3SfQkbiWF3fddRcPP/www4cPB+Ctt95i0KBBjBw5kqeeeoqTTjqJvfbaixEjRnT6aztZmNlCK/Xuw3W3/4W33nqT/zz0c4wd/UsOPfp4IoLTTz+d448/vu7+EcH111/PRhtttFj5Qw89xCqrrLLYdu0db9q0aay00koLl3v06LGwGqrW6zUS1/IiIjj66KM599xzl1j32GOPceutt/Lzn/+c66+/nssv79wZfl0NZWZL6NNnZb55znlcdfnPmD9/PiOHf4RRv/gZ86b8Df79CDMm3M5Lj90N/34E3n8XZj4G/36EkZ/cgot/eCYxYyL8+xEeueOabJs2Ro4cyahRo5g3bx4AM2bM4KWXXqoZT9++fRk4cCB/+MMfAHjnnXd48803O3ycVrfrrrty3XXX8fLLLwNZr6nn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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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iel8fJissxmyc+AFsprh03yc/Bos97pS2bFk58CbZLXTG2hGREwmO3b/neKfRdaEV1PUfL+nrewkBVkzxqyiY6mU1AQ0FxiVkyTztnMwcHhEVP3CSrNa55qFrRQkjZTUW9JqfNx23/hbYGu2twZZ7eeSCoVoVtecLGxlsQPZyKvXyJoA9m3pcNHGJI0ka0p8hawj3qzTczOUmZnlcs3CzMxyOVmYmVmu+rnjYSusu+66MWDAgKLDMDOrK1OmTHktIvqWm7dSJosBAwYwefLkosMwM6srkl5oap6boczMLJeThZmZ5XKyMDOzXCtln4VZPfrggw+YO3cuS5Y094gLs/br3r07/fr1o1u3bi1ex8nCrEbMnTuXnj17MmDAALIbBptVXkSwYMEC5s6dy8CBA1u8npuhzGrEkiVL6NOnjxOFVZUk+vTp0+oarJOFWQ1xorCO0JbzzMnCzD7SpUsXhgwZwhZbbMFee+3Fm2++mbvOBRdcwKBBgxg1alQHRNg5LFiwgCFDhjBkyBA++clPsuGGG340/f77LXkUfGbs2LG8/PLL+Qu2gPssasGp7Xn2e1v3ubDj92mtMuCkWyq6vdln7pm7zOqrr860adMAGD16NBdeeCE/+9nPml3noosu4o477qBfv37NLtdg6dKldO1aZx89lX6P5rz/+vTp89H/4dRTT6VHjx78+Mc/bvVuxo4dy9Zbb80nP9muJzUDrlmYWRN22GEH5s37+NHhZ599Nttuuy2DBw/mlFNOAeDII4/kueeeY4899uC8887j7bff5tBDD2X48OEMHTqUG2+8EYDLLruMvffem5133plddtmlye3Nnj2bQYMG8b3vfY/NN9+cESNG8O672Z3mZ82axa677spWW23F1ltvzbPPPtvkdlZm48aNY/jw4QwZMoSjjjqKZcuWsXTpUg466CC23HJLtthiCy644AKuvvpqpk2bxgEHHNDqGkk5ThZmtoIPP/yQO++8k7333huAiRMnMnPmTCZNmsS0adOYMmUK9913HxdffDEbbLABd999Nz/60Y8444wz2HnnnZk0aRJ33303J554Im+//TYAU6dO5a9//Sv33ntvk9sDmDlzJkcffTRPPfUUvXv35tprrwVg1KhRHH300Tz++OM8+OCDrL/++s1uZ2X05JNPcv311/Pggw8ybdo0li5dyvjx45kyZQqv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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYsAAAFKCAYAAADsVHOaAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nO3debyVVdn/8c9XQMGcFUdQSK2cEBWn6ilzwqE0exxKU3NI/WWpDT6PVs5Z9jRYlGmUJJppmlo45UColQODooBmoGFCDogTzqLX74+1tmwO+5z7HGDf94bzfb9e53X2Xvd07fHa91rrXksRgZmZWUeWqToAMzNrfU4WZmZWyMnCzMwKOVmYmVkhJwszMyvkZGFmZoWcLMyaTNJ+kp6U9IqkraqOp1VImiJppybsdy1Jd0maI+lHi3v/3ZWTRYkkHSxpfP7SeErSzZI+WsJxQ9JGzT5OWSQNyI+pZ9WxdNIPgS9HxAoR8cDi2KGkT0oaK+lVSbMlXS6p3+LYdzNIukTSd+rLImKziLijCYc7BngOWCkivr4oO2oUd3flZFESSV8DfgJ8F1gLWB/4BbBvlXGVZQn6Yu/QQj6ODYApC3m8Hg3K9gd+R3o/rQFsBrwJ/E3SqgtznKXMBsDD0QJXHC8t73sAIsJ/Tf4DVgZeAQ7oYJ3lSB/+/+S/nwDL5WVfAP7WZv0ANsq3LwEuAG4E5gD3ARvmZXfldV/NMRxE+oK5AXgReB74K7BMO3EFcALwOOnX2g/q1wWOBB4BXgBuATZos+3xwFTgX+3s/6PA3TmWJ4Ev5PK9gQeAl3P5mXXb/Dvv+5X8t2MnYtkdeBR4iZSk7wSOzsuWAb4NPAE8C1wKrJyXDcjHOiof9678PH+lzeN4CNivwWv6St3z/1gu3wS4Iz/mKcA+ddtcAlwI3JS32bXNPpXj/J825csAk4Gz68q+mJ+POcDDwNa5vD9wLTALmA38PJefCfy2bvvaY++Z798BfA8Ym1+XPwGr1a1/NfB0fo7vAjbL5ccAbwNv5efj+lw+vfb46Pj9vxMwA/h6fn2eAo5o5/10SZtj7Zqfm1OAx/LjvWoR437vs1d3zO+0ifV/8z4vy+WfBCbm1/xuYFDV30td/h6rOoDu8AfsAcytfejaWeds4F5gTaBvfkOdk5d9geJkMRvYDugJXA5c2WjdfP97wEVAr/z3X4DaiSuAMcBqpLOhfzLvS3ZfYBrpy68n6Qv37jbb3pa37dNg3xuQvsg+l+NYHRicl+0EbJE/6IOAZ4BP52UDqPsSK4qFlBxfBj6Tl52YvwRqj+PIvO37gRVIX6SXtTnWpcD7gD7AgcB9dcfeMj//y3bwHNZeq175WN8ElgV2zs/BB+tey5eAj+TH3rvNvj6U9zewwXHOAu7Jtw8AZgLbkhLMRvn57gE8CJyfH09v4KN5mzMpThYzgc3ztte0Wf9IYEXmffFPrFt2CfkLta5sOvOSRUfv/51In5+z8/O3F/AasGo7z/d8x8qv971AvxzbL4ErFiHuomQxF/h+3l8fYCtSkts+P/+H58e+XNXfTV36Hqs6gO7wBxwCPF2wzmPAXnX3hwLT8+0vUJwsfl23bC/gH43WzffPJv0q3KgTsQewR939LwGj8+2bgaPqli2TP8Qb1G27cwf7PhW4rpPP4U+A8/PtASyYLNqNBTiM/CWal4l0tlJLFqOBL9Ut/yApmfSsO9b765b3Jp29bJzv/xD4RcFzWHut/ov0i7P+7OwK8plTfi0v7WBfH837691g2XHA1Hz7FuDEBuvsSDqjWOCHC51LFufVLd+U9Ku7R4N9rZK3XbnucXWULDp6/+8EvN7m9X4W2KGd52i+Y5HOrnapu79O7fVdyLiLksVb9a8P6UzxnDb7eBT4eGfe+63y5zaLcswG1iiov1yXVL1Q80Qu66yn626/RvqF3J4fkH7d3irpcUmnFOz7yXbi2gD4qaQXJdWqtASs1862bfUnfUksQNL2ksZImiXpJdIX4Rod7KujWNatjyPSp3VG3baNnvuepLalBR5HRLwB/B74vKRlSGdGl3UQW711gScj4t02x+vsc/Zc/r9Og2Xr1C1v77ntDzwREXM7F+4C2r4XepHe2z0knSfpMUkvkxIBdPya1St6/89uE3PRe7zeBsB1de+NR4B3gLUWQ9yNzMrvkfrjf712/BxDf7r2+a6ck0U57iE1QH66g3X+Q3pT1ayfyyDVXS9fWyBp7UUJJiLmRMTXI+L9wD7A1yTt0sEm/duJ60ng2IhYpe6vT0TcXX+4Dvb7JLBhO8t+B4wC+kfEyqRqM3Wwz45ieYpUBQGAJNXfp/FzP5dU9dXe4xhJOmPcBXgtIu5p/2HO5z9A/5xk6o83s4Nj1XuUlOgOqC/M+/tv0lkStP/cPgms384Pl/neZ0Cj91nb98LbpAR1MKkqcFdSG92AWmj5f0ePCTp+/y+qJ4E927w3ekfEzIWM+zU6fp7abvMkcG6b4y8fEVcswmMqnZNFCSLiJeB04AJJn5a0vKRekvaU9H95tSuAb0vqK2mNvP5v87IHgc0kDZbUm1Rd0BXPkOrjgfe6XW6UvzRfIv3Kere9jYGTJa0qqT+p/vf3ufwi4FRJm+X9rizpgPZ20sDlwK6SDpTUU9LqkgbnZSsCz0fEG5K2I32oa2bleN9fV9ZRLDcCW+Tnviep0b3+A34F8FVJAyWtQOqx9vuOfn3n5PAu8CM6f1YBqfPBa8D/5PfATsCngCs7s3E+K/oG6b1ysKTe+cfDr4GVSG0R5PvfkLSNko0kbUBqnH4KOE/S+/L2H8nbTAQ+Jml9SSuTqgnb+rykTSUtT6rO/ENEvEN6vd4knUUvT3oO6833Hmygo/f/oroIODc/fvIxar0QFybuicDB+axkD+DjBcf/FXBcPltWft73lrTiIjym8lVdD9ad/ki/RMeTfsE9TfoS+3Be1hsYRvogP5Vv19d7fov0C+5J4PMs2GZRX0e7EzCj7v5xeZ8vkhpnv0o63X6V9Cv1tA5iDub1hppN+nLsUbf8UGAS83otjWizbYftIqQ6/Pvqtj88l+9PqoqYQ+q59XPmr08/m5Q0XiTXXRfEsgepcb7WG+oe4NC8bBnSl9OTeZ+/JTee0qB9pG6f36ZNe0YHz2F9HfdmpN5YL5F6Ke1Xt2y+17KDfe4LjMuv4fOkL9v+bdY5jnQm8gqpp9RWuXx94I/59XwOGFa3zQX5OZ1G6k3Vts2ivjfU9cAaedkKpHawOfl1O4z536MbM6830B9z2XTmtVm0+/6nzfu57bYNnpv5nsP8+n4tPxdzSNVz312EuIeQerHNIf1QuII2vaEaxLRHfr1ezI/vamDFqr+TuvKn/EDMGpIUpIbcaVXHsrjkKpsZwCERMWYR9nMYcExENP3CylYg6Q5Swv511bFY+VwNZd2CpKGSVpG0HKnbqkjdKRd2f8uTeoYNX0whmrU0JwvrLnYkVT88R2oj+HREvL4wO5I0lFRd9QypId5sqedqKDMzK+QzCzMzK+RkYWZmhZaeERHrrLHGGjFgwICqwzAzW6JMmDDhuYjo22jZUpksBgwYwPjx46sOw8xsiSLpifaWuRrKzMwKOVmYmVkhJwszMyu0VLZZmC2J3n77bWbMmMEbb7xRvLLZIujduzf9+vWjV69end7GycKsRcyYMYMVV1yRAQMGkAYENlv8IoLZs2czY8YMBg4c2OntXA1l1iLeeOMNVl99dScKaypJrL766l0+g3WyMGshThRWhoV5nzlZmNl7evToweDBg9l888351Kc+xYsvvli4zbBhw9hkk0045JBDSoiwe5g9ezaDBw9m8ODBrL322qy33nrv3X/rrbc6vZ8RI0bw9NNPF6/YCW6zsOY5c+Uurv9Sc+JYQg045cbFur/p5+1duE6fPn2YOHEiAIcffjgXXHAB3/rWtzrc5he/+AW33347/fr163C9mrlz59Kz5xL21dPV93Lh/jp+r6+++urvvQ5nnnkmK6ywAt/4xje6fJgRI0aw9dZbs/baizQTM+AzCzNrx4477sjMmfOmBv/BD37Atttuy6BBgzjjjDMAOO6443j88cfZc889Of/883n11Vc58sgj2W677dhqq63405/+BMAll1zCPvvsw84778wuu+zS7v6mT5/OJptswhe/+EU222wzdt99d15/PY0kP23aNHbddVe23HJLtt56ax577LF297M0GzlyJNtttx2DBw/mS1/6Eu+++y5z587l0EMPZYsttmDzzTdn2LBh/P73v2fixIkcdNBBXT4jacTJwswW8M477zB69Gj22WcfAG699VamTp3K2LFjmThxIhMmTOCuu+7ioosuYt1112XMmDF89atf5dxzz2XnnXdm7NixjBkzhpNPPplXX30VgPvvv58//OEP3Hnnne3uD2Dq1Kkcf/zxTJkyhVVWWYVrrrkGgEMOOYTjjz+eBx98kLvvvpt11lmnw/0sjSZPnsx1113H3XffzcSJE5k7dy5XXnklEyZM4LnnnmPSpElMnjyZww477L0kUUsayy677CIdewk7FzSzZnr99dcZPHgwM2fOZJNNNmG33XYDUrK49dZb2WqrrQB45ZVXmDp1Kh/72Mfm2/7WW29l1KhR/PCHPwRSD69///vfAOy2226sttpqHe5v/fXXZ+DAgQwePBiAbbbZhunTpzNnzhxmzpzJfvvtB6TrBLoS19Li9ttvZ9y4cQwZMgRIr1f//v0ZOnQojz76KCeccAJ77703u++++2I/tpOFmb2n1mbx2muvMXToUC644AJOOOEEIoJTTz2VY489tsPtI4JrrrmGD37wg/OV33fffbzvfe+bb71G+5s+fTrLLbfce/d79OjxXjVUe8frTFxLi4jgyCOP5Jxzzllg2UMPPcTNN9/MBRdcwDXXXMPw4Yt3xl9XQ5nZApZffnmGDRvGj370I+bOncvQoUMZMWIEr7zyCgAzZ87k2WefXWC7oUOH8rOf/YzaDJwPPPBAw/13dn81K664Iv369eOPf/wjAG+++eZ7Ca0r+1nS7brrrlx11VU899xzQOo19e9//5tZs2YRERxwwAGcffbZ3H///UB63ubMmbNYju0zCzNraKuttmLQoEFcccUVHHrooTzyyCPsuOOOAKywwgr89re/Zc0115xvm9NOO42TTjqJQYMG8e677zJw4EBuuOGGBfa9++67N9xfjx492o3nsssu49hjj+X000+nV69eXH311e3up21cS4stttiCM844g1133ZV3332XXr16cdFFF9GjRw+OOuooIgJJfP/73wfgiCOO4Oijj6ZPnz6MHTt2kdotlso5uIcMGRKez6IFuOtslzzyyCNssskmVYdh3USj95ukCRExpNH6TauGktRb0lhJD0qaIumsXD5Q0n2Spkn6vaRlc/ly+f60vHxA3b5OzeWPShrarJjNzKyxZrZZvAnsHBFbAoOBPSTtAHwfOD8iNgJeAI7K6x8FvJDLz8/rIWlT4LPAZsAewC8ktX+uamZmi13T2iwi1W+9ku/2yn8B7AwcnMtHAmcCFwL75tsAfwB+rjSAyb7AlRHxJvAvSdOA7YB7mhW7NdbVK4qn925SIGZWuqb2hpLUQ9JE4FngNuAx4MWImJtXmQGsl2+vBzwJkJe/BKxeX95gm/pjHSNpvKTxs2bNasbDMWu6pbEN0VrPwrzPmposIuKdiBgM9COdDXyoiccaHhFDImJI3759m3UYs6bp3bs3s2fPdsKwpqrNZ1G7sLGzSuk6GxEvShoD7AisIqlnPnvoB9QGn5kJ9AdmSOoJrAzMriuvqd/GbKnRr18/ZsyYgc+MrdlqM+V1RdOShaS+wNs5UfQBdiM1Wo8B9geuBA4H/pQ3GZXv35OX/yUiQtIo4HeSfgysC2wMjG1W3GZV6dWrV5dmLjMrUzPPLNYBRuaeS8sAV0XEDZIeBq6U9B3gAeDivP7FwGW5Aft5Ug8oImKKpKuAh4G5wPER8U4T4zYzszaa2RvqIWCrBuWPk9ov2pa/ARzQzr7OBc5d3DGamVnneGwoMzMr5GRhZmaFnCzMzKyQk4WZmRVysjAzs0JOFmZmVsjJwszMCjlZmJlZIScLMzMr5GRhZmaFnCzMzKyQk4WZmRVysjAzs0JOFmZmVsjJwszMCjlZmJlZIScLMzMr5GRhZmaFnCzMzKyQk4WZmRVysjAzs0JOFmZmVsjJwszMCjUtWUjqL2mMpIclTZF0Yi4/U9JMSRPz315125wqaZqkRyUNrSvfI5dNk3RKs2I2M7PGejZx33OBr0fE/ZJWBCZIui0vOz8ifli/sqRNgc8CmwHrArdL+kBefAGwGzADGCdpVEQ83MTYzcysTtOSRUQ8BTyVb8+R9AiwXgeb7AtcGRFvAv+SNA3YLi+bFhGPA0i6Mq/rZGFmVpJS2iwkDQC2Au7LRV+W9JCkEZJWzWXrAU/WbTYjl7VXbmZmJWl6spC0AnANcFJEvAxcCGwIDCadefxoMR3nGEnjJY2fNWvW4tilmZllTU0WknqREsXlEXEtQEQ8ExHvRMS7wK+YV9U0E+hft3m/XNZe+XwiYnhEDImIIX379l38D8bMrBtrZm8oARcDj0TEj+vK16lbbT9gcr49CvispOUkDQQ2BsYC44CNJQ2UtCypEXxUs+I2M7MFNbM31EeAQ4FJkibmsm8Cn5M0GAhgOnAsQERMkXQVqeF6LnB8RLwDIOnLwC1AD2BERExpYtxmZtZGM3tD/Q1Qg0U3dbDNucC5Dcpv6mg7MzNrLl/BbWZmhZwszMyskJOFmZkVcrIwM7NCThZmZlbIycLMzAo5WZiZWSEnCzMzK+RkYWZmhZwszMyskJOFmZkVcrIwM7NCThZmZlbIycLMzAo5WZiZWSEnCzMzK+RkYWZmhZwszMyskJOFmZkVcrIwM7NCThZmZlbIycLMzAo5WZiZWSEnCzMzK9S0ZCGpv6Qxkh6WNEXSibl8NUm3SZqa/6+ayyVpmKRpkh6StHXdvg7P60+VdHizYjYzs8aaeWYxF/h6RGwK7AAcL2lT4BRgdERsDIzO9wH2BDbOf8cAF0JKLsAZwPbAdsAZtQRjZmblaFqyiIinIuL+fHsO8AiwHrAvMDKvNhL4dL69L3BpJPcCq0haBxgK3BYRz0fEC8BtwB7NitvMzBZUSpuFpAHAVsB9wFoR8VRe9DSwVr69HvBk3WYzcll75WZmVpKmJwtJKwDXACdFxMv1yyIigFhMxzlG0nhJ42fNmrU4dmlmZllTk4WkXqREcXlEXJuLn8nVS+T/z+bymUD/us375bL2yucTEcMjYkhEDOnbt+/ifSBmZt1cM3tDCbgYeCQifly3aBRQ69F0OPCnuvLDcq+oHYCXcnXVLcDuklbNDdu75zIzMytJzybu+yPAocAkSRNz2TeB84CrJB0FPAEcmJfdBOwFTANeA44AiIjnJZ0DjMvrnR0RzzcxbjMza6NpySIi/gaoncW7NFg/gOPb2dcIYMTii87MzLrCV3CbmVmhLieL3HYwqBnBmJlZa+pUspB0h6SV8tXU9wO/kvTjou3MzGzp0Nkzi5XzNRKfIV1lvT2wa/PCMjOzVtLZZNEzXxNxIHBDE+MxM7MW1NlkcRbp2oZpETFO0vuBqc0Ly8zMWklnu84+FRHvNWpHxONuszAz6z46e2bxs06WmZnZUqjDMwtJOwIfBvpK+lrdopWAHs0MzMzMWkdRNdSywAp5vRXryl8G9m9WUGZm1lo6TBYRcSdwp6RLIuKJkmIyM7MW09kG7uUkDQcG1G8TETs3IygzM2stnU0WVwMXAb8G3mleOGZm1oo6myzmRsSFTY3EzMxaVme7zl4v6UuS1pG0Wu2vqZGZmVnL6OyZRW1mu5PrygJ4/+INx8zMWlGnkkVEDGx2IGZm1ro6lSwkHdaoPCIuXbzhmJlZK+psNdS2dbd7k6ZFvR9wsjAz6wY6Ww31lfr7klYBrmxKRGZm1nIWdg7uVwG3Y5iZdROdbbO4ntT7CdIAgpsAVzUrKDMzay2dbbP4Yd3tucATETGjCfGYmVkL6lQ1VB5Q8B+kkWdXBd5qZlBmZtZaOpUsJB0IjAUOIM3DfZ+kDocolzRC0rOSJteVnSlppqSJ+W+vumWnSpom6VFJQ+vK98hl0ySd0tUHaGZmi66z1VDfAraNiGcBJPUFbgf+0ME2lwA/Z8HutedHRH21FpI2BT4LbAasC9wu6QN58QXAbsAMYJykURHxcCfjNjOzxaCzyWKZWqLIZlNwVhIRd0ka0Mn97wtcGRFvAv+SNA3YLi+bFhGPA0i6Mq/rZGFmVqLOdp39s6RbJH1B0heAG4GbFvKYX5b0UK6mWjWXrQc8WbfOjFzWXvkCJB0jabyk8bNmzVrI0MzMrJEOk4WkjSR9JCJOBn4JDMp/9wDDF+J4FwIbAoOBp4AfLcQ+GoqI4RExJCKG9O3bd3Ht1szMKK6G+glwKkBEXAtcCyBpi7zsU105WEQ8U7st6VfADfnuTKB/3ar9chkdlJuZWUmKqqHWiohJbQtz2YCuHkzSOnV39wNqPaVGAZ+VtJykgcDGpN5X44CNJQ2UtCypEXxUV49rZmaLpujMYpUOlvXpaENJVwA7AWtImgGcAewkaTDpavDpwLEAETFF0lWkhuu5wPER8U7ez5eBW0hXjo+IiCkFMZuZ2WJWlCzGS/piRPyqvlDS0cCEjjaMiM81KL64g/XPBc5tUH4TC9+YbmZmi0FRsjgJuE7SIcxLDkOAZUnVSGZm1g10mCxyg/SHJX0C2DwX3xgRf2l6ZGZm1jI6O5/FGGBMk2MxM7MWtbDzWZiZWTfiZGFmZoWcLMzMrJCThZmZFXKyMDOzQp0dotzMzKpw5spdXP+lpoThMwszMyvkMwuzpciAU27s0vrTex/ctQM06VertT6fWZiZWSEnCzMzK+RqKDOzEnW9qrBJgXSRzyzMzKyQzyxaXJd/hZy3d5MiMesav3eXLj6zMDOzQk4WZmZWyMnCzMwKuc1iadMiQwOY2dLFZxZmZlbIZxZm1hp8VtzSnCzMbKnnbryLrmnVUJJGSHpW0uS6stUk3SZpav6/ai6XpGGSpkl6SNLWddscntefKunwZsVrZmbta+aZxSXAz4FL68pOAUZHxHmSTsn3/xfYE9g4/20PXAhsL2k14AxgCBDABEmjIuKFJsZtZt2dq8QW0LQzi4i4C3i+TfG+wMh8eyTw6brySyO5F1hF0jrAUOC2iHg+J4jbgD2aFbOZmTVWdm+otSLiqXz7aWCtfHs94Mm69WbksvbKzcysRJV1nY2IIFUtLRaSjpE0XtL4WbNmLa7dmpkZ5SeLZ3L1Evn/s7l8JtC/br1+uay98gVExPCIGBIRQ/r27bvYAzcz687KThajgFqPpsOBP9WVH5Z7Re0AvJSrq24Bdpe0au45tXsuMzOzEjWtN5SkK4CdgDUkzSD1ajoPuErSUcATwIF59ZuAvYBpwGvAEQAR8bykc4Bxeb2zI6Jto7mZmTVZ05JFRHyunUW7NFg3gOPb2c8IYMRiDM3MzLrIY0OZmVkhJwszMyvkZGFmZoWcLMzMrJCThZmZFXKyMDOzQk4WZmZWyMnCzMwKOVmYmVkhJwszMyvkZGFmZoWcLMzMrJCThZmZFXKyMDOzQk4WZmZWyMnCzMwKOVmYmVkhJwszMyvkZGFmZoWcLMzMrJCThZmZFXKyMDOzQj2rDqAVDTjlxi6tP/28vZsUiZlZa3CyWBzOXLmL67/UnDjMzJqkkmooSdMlTZI0UdL4XLaapNskTc3/V83lkjRM0jRJD0nauoqYzcy6syrbLD4REYMjYki+fwowOiI2Bkbn+wB7Ahvnv2OAC0uP1Mysm2ulBu59gZH59kjg03Xll0ZyL7CKpHWqCNDMrLuqKlkEcKukCZKOyWVrRcRT+fbTwFr59nrAk3XbzshlZmZWkqoauD8aETMlrQncJukf9QsjIiRFV3aYk84xAOuvv/7ii9TMzKpJFhExM/9/VtJ1wHbAM5LWiYincjXTs3n1mUD/us375bK2+xwODAcYMmRIlxKN2aLoclfr3gd37QDuPWctoPRqKEnvk7Ri7TawOzAZGAUcnlc7HPhTvj0KOCz3itoBeKmuusrMzEpQxZnFWsB1kmrH/11E/FnSOOAqSUcBTwAH5vVvAvYCpgGvAUeUH7KZWfdWerKIiMeBLRuUzwZ2aVAewPElhGZmZu1opa6zZmbWopwszMyskJOFmZkVcrIwM7NCThZmZlbIycLMzAo5WZiZWSEnCzMzK+RkYWZmhZwszMyskJOFmZkVcrIwM7NCThZmZlbIycLMzAo5WZiZWSEnCzMzK+RkYWZmhZwszMyskJOFmZkVcrIwM7NCThZmZlbIycLMzAo5WZiZWSEnCzMzK7TEJAtJe0h6VNI0SadUHY+ZWXeyRCQLST2AC4A9gU2Bz0natNqozMy6jyUiWQDbAdMi4vGIeAu4Eti34pjMzLoNRUTVMRSStD+wR0Qcne8fCmwfEV+uW+cY4Jh894PAo00IZQ3guSbsd2E4lsYcS2OOpTHHMr8NIqJvowU9y46kWSJiODC8mceQND4ihjTzGJ3lWBpzLI05lsYcS+ctKdVQM4H+dff75TIzMyvBkpIsxgEbSxooaVngs8CoimMyM+s2lohqqIiYK+nLwC1AD2BEREypIJSmVnN1kWNpzLE05lgacyydtEQ0cJuZWbWWlGooMzOrkJOFmZkVcrIwM7NCThYNSFpN0jclfU3SSlXH02ok9ZB0edVxtBJJy0j6cNVxtLr8PHX7z1T+DP2w6ji6YonoDVWBa4B7gNWBeyR9KiIerzgmJK0HbEDd6xYRd5UdR0S8I2kDScvm4VcqJWkCMAL4XUS8UEUMEfGupAuArao4fj1J1wPt9lyJiH1KDAdJvwOOA94hdYNfSdJPI+IHZcZRF88GwMYRcbukPkDPiJhTZgz5M/TRMo+5qJwsGls9Ir4JIOlW4E5JLwJfB46OiAPLDkjS94GDgIdJHzpIXwilJ4vsceDvkkYBr9YKI+LHFcRyEHAEME7SeOA3wK1Rfle/0ZL+G7i2gmPXa7VfrJtGxMuSDqs56PEAABPZSURBVAFuBk4BJgClJwtJXyQNC7QasCHpAt+LgF3KjgV4IH9+rmb+z9C1FcRSyF1nG5D0d+CQiJie7wtYF3gBWDkinqogpkeBQRHxZtnHbkTSGY3KI+KssmOpkbQM8EngQlJC/Q3w04h4vqTjzwHel4/9OiAgIqJbV7tImgIMBn4H/Dwi7pT0YERsWUEsE0kDk94XEVvlskkRsUUFsfymQXFExJFlx9IZPrNo7Ehg2dqd/CuxNrzIa5VElH7J9wJaIllUmRQakTSIdHaxF6ka8XLgo8BfSF9UTRcRK5ZxnM6StDHwPdKw/r1r5RHx/pJD+SUwHXgQuCtXA71ccgw1b0bEW+n3H0jqSQdVds0UEUdUcdyF5WTRQEQ0Y8TaRfUaMFHSaOoSRkScUEUwkvoC/wNsxvxfRDtXEMsE4EXgYuCUurOv+yR9pMQ4BBwCDIyIcyT1B9aJiLFlxdDGb4AzgPOBT5CSaemdWiJiGDCsrugJSZ8oO47sTknfBPpI2g34EnB9FYFI6g0cxYKfoZY8s3BvqCXHKOAc4G5SfW/tryqXA/8ABgJnkX45jis7iFz1dE1E7BIRv2tbTRcRnykxnF8AOwIH5/uvkCbtqkqfiBhNqm5+IiLOBPYuOwhJa0m6WNLN+f6mwOFlx5GdAswCJgHHAjcB364olsuAtYGhwJ2k9pNSG9q7wm0WtlAkTYiIbSQ9FBGDctm4iNi2glhaYmhnSfdHxNaSHqirD6+kbj4f+25SVdwfSNVxM4HzIuKDJcdxM+ks51sRsWWu+nmgonaC9wFvRMQ7+X4PYLmIKL16ufY+qX2GJPUC/hoRO5QdS2f4zKLFSboq/58k6aG2fxWG9nb+/5SkvSVtRephUoXbJX1DUv98jcxqkqqI5e385RPwXlXduxXEUXMisDxwArANcCjV/KJfIyKuIj8XETGXeT36yjYa6FN3vw9we0Wx1D5DL0raHFgZWLOiWAq5zaL1nZj/f7LSKBb0HUkrk7oT/wxYCfhqRbEclP8fX1cWQNkNucOA64A1JZ0L7E91VRxERK1a8BVSe0VVXpW0OvOS6A7ASxXF0jsiXqndiYhXJC1fUSzDJa0KnEaqZl4BOL2iWAq5GmoJk69+rb8or5RuodY5kj5E6rMvYHREPFJhLB8ATmbBCzlL7YQgaWvSD4rNgclAX2D/iCj9zDh3i/9KRNyf729D6s67Y9mxLGmcLJYQko4lNSS/wbyuflF2N0hJP6Pjq4Or6p21OQt2Eb20gjh6AGsx/5fzv8uOI8fyIOmCswnUVftEROkdI3I7xQdJSfTRiHi7YJNmxbEtcCXwnxzL2sBBZT4nkr7W0fKKLmwt5GqoJcc3gM0jouoJ3cdXfPwF5AsEdyIli5uAPYG/AaUmC0lfIXVVfYb05SxSYh1UZhx15kbEhRUdG0nt9UT7gKRKrlSOiHH57K/WyF9F4mqp63E6y2cWSwhJfwY+U0WvjVYnaRKwJamHzZaS1gJ+GxG7lRzHNGD7iJhd5nHbI+lM4FlSO0r9tTllXdHe6ArlujDKu55A0s4R8Zf2ElirDrHRSnxmseQ4Fbhb0n1UeFFeqw1Sl72eB/Kbm9t0ngX6VxDHk1TXcNtIrefTyXVlpTX8t9gVyh8ndR/+VINlAZSWLCQN62h5VVW5RZwslhy/JL3ZJ1Ftd8xWG6QOYLykVYBfkernXyGNGlyKujrox4E7JN3I/Am9kjroiBhYxXEbkbQ3C16pfHZZx4+I2lhmR9eusahQlRfTLjRXQy0h6i/0ahWSlgU+kO9W1mhZT9IAYKUye9q0N6hiFmV+KdbLF3n9P+BjuegO4Jdlv06SLiJd7/EJ4NekLsVjI+KoMuPIsfwb+DPwe+AvFY8ODICkFSB14606lo44WSwhJH2XNKTG9VRQ/9wgnp2AkTkmkap9Do8K5teQNDoidikqKyGOAyLi6qKyEuP5NWnwyZG56FDgnYg4uuQ4alco1/6vANwcEf9VZhw5luVJ1yx9FtgauAG4MiL+VkEsm5OG/FiN9BmaBRwWEVPKjqUznCyWEJL+1aC49K6zNXnwvoNrgy7mPv1XRMQ2JcbQm/SLdQypN5TyopWAP0fEh8qKJcdzf0RsXVRWYjwLDDVSxfAjku6LiO0l3Qt8BngemBwRG5UZR4O4VgV+SpqOoEcFx7+bNATKmHx/J+C7EdGSMy66zWIJ0Ur1z1mv+tF5I+KfudqjTMcCJ5HmGrm/rvxl4OdlBSFpT9LQ6Ou1abxcCZhbVhwNvCNpw4h4DEDS+6lmmI0bcpvS/zGvvv7XFcQBgKSPk67634PUFbz0ycyy99USBUBE3JHHrmpJThYtroO+6kClXf7G52qO3+b7n6fkazAi4qfATyV9JSJ+Vuax2/gP6bEfAPwzl80lXW9R1RAokHpBjZH0OOmsawNKHPYjXwD3ZESck++vQOqg8Q/SsOmlkzQdeAC4Cjg5Il7teIumelzSaaSqKEifocqnb26Pq6FaXF1f9TWBD5N6REFqLLw7IioZM0rScqSxmGrzCN8FXNh2iPAmx9ASfefzGdW5wNGkNhyA9UkjrX6zyob//DrVX4BW5utzP7BrRDwv6WOkK6e/QpqMapOI2L+sWHI8PUjVPpV0OGgrV4OdRfoMBfBX4KyoaB75Ik4WSwilucAPjzylq6R1gEsiYmjJcfQF+kbEw23KNwOejYhZJcZyVkSc0c7FX6Vd9CXpfNIgcF+LiDm5bCVSN+PXI+LEjrZvQjytkkTfax+RdAEwK9KcGkiaGBGlzGDYJqaxEbFd2cdtE0NvYMW2nxVJawIvR8Qb1UTWMVdDLTn6x/xzfz9DqlYo289Ik/y0tRrwLeZN/NN0tb7zLXDx1yeBD9R3w4yIlyX9P1KVS6nJgta5AK2HpJ6RhiTfBTimbllV3z1/l/RzUtfZ96qgagMLlmQYqftu29fhI8DupO7OLcdnFkuI/AbfGLgiFx0ETK3gCu52JxqSNDkiNi8xlpYYkE3SPyPiA11dtrST9C1Sw/9zpGq5rSMiJG0EjIyI0qa8rYtpTIPiiBJH4lWeOKydZVMiYrOyYukKn1ksISLiy5L2Y94FVneTRswsW0eDoJXdG6pVBmR7WNJh0WaUW0mfJ51ZVELSiaR2kzmkq9u3Js1RfmsZx4+Ic5XmjF8HuLXuzGsZUttF6SKiqrm/63U0f0bLTkjnZLFkmU5q5D4A+BdwTQUxTJO0V0TcVF+Yu4+W2pMjIs4q83gdOB64VtKRzOsaOoQ0C9t+lUUFR0bETyUNBVYnXZR3GVBKsgCIiHsblP2z0bplyINMfhdYNyL2VJoPfMeIuLjEMJ6VtF1EjG0T27akC/NakpNFi8sXu30u/z1HqmtVhb+QTgJulHQg838x7kjJs/lJ+p+I+D+1M8dGWVV0ETET2F7SzqTxjwBuiojRZRy/A7WLFPcCLo2IKZLU0QbdwCXk+cDz/X+SPlNlJouTgaskXcL8n6HDSFeWtyS3WbQ4Se+SutQdFRHTctnjVV25nY+/HKkhu9Y+MQX4Xdm9OCR9KiKul9RwXumIGNmovLvIvcTWAwaShnDvAdxR5lX2rUbSuIjYtn6stSp6ZuWeT8cz7zM0GbggIp4tM46u8JlF6/sM6dfGGKU5La5k3i/GSuS++u91V5X0ySq6+0XE9fl/t04KHTiKdE3D4xHxmqTVqHYu7lbQEvOB56Tw3gCUkrZu5UQBPrNYYuRhAPYlVUftTJoF7rqyGis7UtX4R5JGdbQ8qplbo2VI+ggwMSJezY3tWwM/jYgnKg6tMmqh+cDbxFXZGGKd5WSxBMpXfh5Amju41JFV24mnkuHTJc0iTTh0BXAfbc64IuLOsmNqJZIeIlU/DSLV1f8aODAiPl5lXFWoG3rkaaX5wI8F/ht4GDg9Khq9uS6+lpuCoC0nC1tkjXp2lHTcHsBupLOtQcCNpJFvW3KI57LVfq1KOh2YGREXLwm/YJuh1YYeaRDfpyPij1XGUKRl+/Raa5O0vKTTJP0qIsZK2lhSqb2hIuKdiPhzRBwO7ABMI81U9+Uy42hhcySdSuoye6OkZSj/WphW0aPu7OEgYHhEXBMRpwGVDJWu5POSTo+IP0paX1KlQ5F0xMnCFtZvSJMw7ZjvzwS+U3YQkpbLYyD9ltS7ZBhwXdlxtKiDSK/RkRHxNNAP+EG1IVWmR65+gjT0yF/qllXV0ecXpM/P5/L9OcAFFcVSyL2hbGFtGBEHSfocQO5tU2ovLUmXkhoqbyKN1jm5zOO3ulw/fw1pmBhI1+l010R6BXCnpOeA10nd0clDj5TeGyrbPlcTPgAQES8oTVXckpwsbGG9JakP87ogbkjddK8l+TxpMLgTgRPqcpVI4/2sVHI8LUXSF0mD960GbEi65uIi0i/rbqUVhx4B3s7tbrXPUF/g3YpiKeRkYQvrDNLImf0lXU4aMfMLZQYQEa5G7djxwHaknmJExNR8MVi31GpDjzCvynRNSecC+wOnVRhPh5wsbKFExG25h8kOpF/yJ0bEcxWHZfN7MyLeqp1x5Tp7d39sERFxudJc9ruQPkOfjohHKg6rXU4WtlBy90NIjXIAm0oiIu6qKiZbwJ2Svgn0kbQb8CXg+opjskzSZRFxKHUjE9eVtRxfZ2ELRVL9l05vUnXHhDLnBbCO5a6yR5Em1BFwC/Dr8Ie+JbS95iW3X0yKiE0rDKtdPrOwhRIR883CJqk/8JOKwrE6kkbnK/u/FxH/S5rLwlpEvvaldsb3MvNGHngLGF5ZYAV8ZmGLRe42O6VVfxV1J5IeBo4mDbt9MAsOg1LmFKLWDknfi4hTq46js5wsbKG0mUNiGdKwCdMj4vPVRWUAkvYnVT99FBjfZnGpU4jagiR9KCL+kQc1XECrJnMnC1sobeaQmEtKFH+vKh5bkKTTIuKcquOw+UkaHhHHqAXmA+8KJwuzpZikfZg3b/sdEXFDlfHYksvJwrpE0iQa99WvXTU9qOSQrB2SvkfqpXZ5LvocMC4ivlldVFZP0oeBAdR1NoqISysLqANOFtYlkjboaHl3nlin1eT5LAZHxLv5fg/gASf01iDpMtIwLBOBd3JxlDV3fFe566x1SaNkIGkNYLb777ekVYDa0NwrVxmILWAIsOmS8rnx2DrWJZJ2kHSHpGslbSVpMml6ymck7VF1fDaf7wEPSLpE0khgAnBuxTHZPJOBtasOorNcDWVdImk86YKilUkXEO0ZEfdK+hBplrqWnhqyu8jXvfQj9VTbNhePzfNaWIXy6AcBrEjqcj6WuhGbW3XueCcL6xJJEyNicL79SERsUres5ecR7k4kTYqILaqOw+Yn6aukGQvvB95uu7xV5453m4V1Vf14+6+3WeZfHq3lfknbRsS4qgOx+awHfBg4FXgI+DtwN3B33dSvLcdnFtYlkt4hTTgkoA/wWm0R0Dsiuusczy1H0j9Is+RNZ95r5u7NLSLPijeElDh2zH8vtuqQOT6zsC6JiB5Vx2CdNrTqAKxDfYCVSO1/KwP/ASZVGlEHfGZhtpSR1Bs4DtiI9OVzcUTMrTYqq5E0HNiMNBfMfcC9wL0R8UKlgRVw11mzpc9IUvXGJGBP4EfVhmNtrA8sBzwNzARmAC9WGlEn+MzCbClT3wsqT6U6tn6SHate7tq8Gam94sPA5qSLJ++JiDOqjK09brMwW/q81x0zIubW5uC21pGv2p4s6UXgpfz3SdJYXi2ZLHxmYbaUqeuxBvP3Wqv1hlqpqtgMJJ3AvDOKt8ndZvPfpNpYXq3GZxZmSxn3WGt5A4Crga9GxFMVx9JpPrMwM7NC7g1lZmaFnCzMzKyQk4VZJmltSVdKekzSBEk3SfpAO+uuIulLJcV1nKTDyjiWWXvcZmHGe/3e7wZGRsRFuWxLYKWI+GuD9QcAN0TE5k2Oq6evvrZW4DMLs+QTwNu1RAEQEQ+SJg8aLel+SZMk7ZsXnwdsKGmipB8ASDpZ0jhJD0k6q7YfSadJelTS3yRdIekbuXywpHvz+tdJWjWX3yHpJ3nukBMlnVm3zYaS/pzPfP6a5xFB0gGSJkt6UNJdJTxf1s2466xZsjlpJrm23gD2i4iX8/Sx90oaBZwCbF43t8fupBFetyNdzzBK0sdIw7j/N7Al8+YwqB3nUuArEXGnpLNJF2OdlJctGxFD8r7PrItnOHBcREyVtD3wC2Bn4HRgaETMlLTKoj8dZvNzsjDrmIDv5i/+d0lzEazVYL3d898D+f4KpOSxIvCniHgDeCPPkoaklYFV6ia6GUnqe1/z+wUCkVYgXch1dd1V2cvl/38HLpF0FXDtQjxOsw45WZglU4D9G5QfAvQFtomItyVNB3o3WE/A9yLil/MVSic1WLczXm1QtgxpvoPBbRdExHH5TGNvYIKkbSJi9kIe22wBbrMwS/4CLCfpmFqBpEHABsCzOVF8It+HNLz0inXb3wIcmX/9I2k9SWuSfvF/SlLvvOyTABHxEvCCpP/K2x8KdDidZkS8DPxL0gH5GMqN8EjaMCLui4jTgVlA/4V+Jswa8JmFGWnAJEn7AT+R9L+ktorpwJnAMEmTgPHAP/L6syX9XdJk4OaIOFnSJsA9uYroFeDzETEut3E8BDxDGjb8pXzYw4GLJC0PPA4c0YlQDwEulPRtUhvIlcCDwA8kbUw6wxmdy8wWG3edNWsySStExCs5KdwFHBMR91cdl1lX+MzCrPmGS9qU1NYx0onClkQ+szAzs0Ju4DYzs0JOFmZmVsjJwszMCjlZmJlZIScLMzMr5GRhZmaF/j81cYrmy7YLdQAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_categories(2)\n",
    "plot_categories(3)\n",
    "plot_categories(4)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Categorical data drift\n",
    "\n",
    "While the *TabularDrift* detector works fine with numerical or categorical features only, we can also directly use a categorical drift detector. In this case, we don't need to specify the categorical feature columns. First we construct a categorical-only dataset and then use the *ChiSquareDrift* detector:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "((10000, 8), (10000, 8))"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cols = list(category_map.keys())\n",
    "cat_names = [feature_names[_] for _ in list(category_map.keys())]\n",
    "X_ref_cat, X_t0_cat = X_ref[:, cols], X_t0[:, cols]\n",
    "X_ref_cat.shape, X_t0_cat.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Drift? No!\n"
     ]
    }
   ],
   "source": [
    "cd = ChiSquareDrift(X_ref_cat, p_val=.05)\n",
    "preds = cd.predict(X_t0_cat)\n",
    "print('Drift? {}'.format(labels[preds['data']['is_drift']]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Threshold 0.00625\n",
      "Workclass -- Drift? No! -- Chi2 8.487 -- p-value 0.387\n",
      "Education -- Drift? No! -- Chi2 4.753 -- p-value 0.576\n",
      "Marital Status -- Drift? No! -- Chi2 3.160 -- p-value 0.368\n",
      "Occupation -- Drift? No! -- Chi2 8.194 -- p-value 0.415\n",
      "Relationship -- Drift? No! -- Chi2 0.485 -- p-value 0.993\n",
      "Race -- Drift? No! -- Chi2 0.587 -- p-value 0.965\n",
      "Sex -- Drift? No! -- Chi2 0.217 -- p-value 0.641\n",
      "Country -- Drift? No! -- Chi2 9.991 -- p-value 0.441\n"
     ]
    }
   ],
   "source": [
    "print(f\"Threshold {preds['data']['threshold']}\")\n",
    "for f in range(cd.n_features):\n",
    "    fname = cat_names[f]\n",
    "    is_drift = (preds['data']['p_val'][f] < preds['data']['threshold']).astype(int)\n",
    "    stat_val, p_val = preds['data']['distance'][f], preds['data']['p_val'][f]\n",
    "    print(f'{fname} -- Drift? {labels[is_drift]} -- {stat} {stat_val:.3f} -- p-value {p_val:.3f}')"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.14"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
